#pragma once
#include "my_define.h"

#include "stdint.h"
int vision_main(uint8_t mt9v03x_image[IMAGE_HEIGHT][IMAGE_WIDTH]);
// 每一行的边界相关信息
struct ImageDealDatatypedef
{
    uint8 IsRightFind = 0;             // 右边有边标志 未用到  0：无边界 1：边界
    uint8 IsLeftFind = 0;              // 左边有边标志 未用到
    int Wide = RESULT_WIDTH;           // 道路宽度
    int LeftBorder = 0;                // 左边界
    int RightBorder = RESULT_WIDTH;    // 右边界
    int Center = RESULT_WIDTH / 2;     // 中线
    int Left_Sideline = 0;             // 左边界 初始化边界 防止寻线越界 逆透视有内容的开始 赋值但未用到
    int Right_Sideline = RESULT_WIDTH; // 右边界 初始化边界 防止寻线越界 逆透视有内容的开始 赋值但未用到
};

// 十字相关信息
struct ImageElementtypedef
{
    int Cross = 0; // 十字 1：正入 2：斜入 0：无
};

// 图像整体边界信息
struct ImageStatustypedef
{
    int TowPoint = 0; // 控制行，也就是前瞻，未用到
    int Det_True = 0; // 位置偏差，未用到
    int OFFLine = 1;  // 图像顶边
    int whitelines_L = 0;
    int whitelines_R = 0;
    int whitelines = 0;
};

class ImageInfo
{
public:
    ImageStatustypedef ImageStatus;                // 图像整体边界信息
    ImageDealDatatypedef ImageDeal[RESULT_HEIGHT]; // 每一行的边界相关信息
    ImageElementtypedef Element;                   // 十字相关信息

    uint8 RESULT_IMAGE[RESULT_HEIGHT][RESULT_WIDTH]; // 逆透视之后的图像，然后再二值化之后的图像

    uint8 left_broad[IMAGE_HEIGHT][IMAGE_WIDTH];  // 左边界，未用到
    uint8 right_broad[IMAGE_HEIGHT][IMAGE_WIDTH]; // 右边界，未用到
};

extern ImageInfo image_info;
